[AWS SDK][CloudWatch]アラームを取得する
はじめに
t.hondaです。前回に引き続き、EC2のディスク使用率に関する値を取得するプログラムについてです。今回はCloudWatchにてアラームを設定し、その状態(正常かアラート状態かなど)を取得します。
アラームの設定
前回、EC2上に設定したディスクの使用率を監視するCloutWatchを元に、アラームを予め設定します。設定方法については、以下のサイトを参考にしてください。
Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩
プログラム
今回も、前回と同様、Javaになります。以下のようなプログラムになりました。
package cloudwatchsample; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient; import com.amazonaws.services.cloudwatch.model.DescribeAlarmsRequest; import com.amazonaws.services.cloudwatch.model.DescribeAlarmsResult; import com.amazonaws.services.cloudwatch.model.MetricAlarm; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * * @author */ public class CloudWatchSample { private final static String ACCESS_KEY = "Your Access Key"; private final static String SECRET_ACCESS_KEY = "Your Secret Key"; private final static String MONITORING_END_POINT = "Monitoring End Point"; private final static String ALARM_NAME = "DiskSpaceUtilizationAlarm"; /** * @param args the command line arguments */ public static void main(String[] args) { AWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY); AmazonCloudWatchClient client = new AmazonCloudWatchClient(awsCredentials); client.setEndpoint(MONITORING_END_POINT); getMetricsAlarms(client); } private static void getMetricsAlarms(AmazonCloudWatchClient client){ DescribeAlarmsRequest request = new DescribeAlarmsRequest(); Collection<String> alarmNames = new ArrayList<>(); alarmNames.add(ALARM_NAME); request.setAlarmNames(alarmNames); DescribeAlarmsResult alarms = client.describeAlarms(request); List<MetricAlarm> list = alarms.getMetricAlarms(); list.stream().forEach((a) -> { //a.stateValueに"OK","ALERM"かを取得。 System.out.printf("%s\tstate=%s action=%s%n", a.getAlarmName(), a.getStateValue(), a.getAlarmActions()); }); } }
定数の「ALARM_NAME」は、先に設定したアラーム名です(画像を参考にしてください)。
main()については前回とほぼ変わらず、アラームを取得するgetMetricsAlarms()を呼び出しています。
getMetricsAlarms()で、定数で定義したアラームを使用して、CloudWatchのアラームの状態を取得しています。コメントに書いてある通り、取得したオブジェクトのgetStateValue()にて、アラームの状態が参照できます。実際にやってみたいと思います。
上記のようなアラート状態でプログラムを実行すると、以下のように出力されます。
DiskSpaceUtilizationAlarm state=ALARM action=[arn:aws:sns:xxxxxxx:xxxxxxx:DiskSpaceUtilizationAlarmNotify]
「state」として「ALARM」が取得できました。
では、アラームが正常な状態で実行してみます。
上記のような状態でプログラムを実行すると、以下のように出力されます。
DiskSpaceUtilizationAlarm state=OK action=[arn:aws:sns:xxxxxxx:xxxxxxx:DiskSpaceUtilizationAlarmNotify]
「state」として「OK」が取得できました。
まとめ
アラームを取得できました。アラート状態をきっかけに何か複雑な処理を行う場合などに、参考となれば幸いです。
参考サイト
Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩
Amazon CloudWatch Java API